--- %%NOBANNER%% -->
![]() | ![]() |
/*-------------------<-- Start of Description-->---------------------\ | Label a row or a column of a table in the opened word document; | |---------------------<-- End of Description-->----------------------| |--------------------------------------------------------------------| |------------<-- Start of Files or Arguments Needed-->---------------| |Write a label for a row or a column | | text=(text1+-text2); you can input the layout of the cell in | | "text=" area; the function will read in exactly like it is; | | Note: you can use quoted text, but the function can only recognize| | the first quoted string. | | nextdlm=F / T; Default is 'T'; | | T -- start to write to the next delimiter; e.g. next cell if | | "dlm=cell"; i.e. start of the table or change to a new | | format, you don't want to put delimiter before the first | | cell; | | F -- write under the current cursor without jumping to the next| | delimiter; | | justify: CENTER/center -- center justified; | | LEFT/left -- left justified; | | RIGHT/right -- right justified; | | fontstyle: default style is REGULAR/regular, | | default font is Times New Romans; | | ITALIC/italic -- italic; | | UNDERLINE1/underline1 -- underline for all; | | UNDERLINE2/underline2 -- underline for word only; | | BOLD/bold -- boldface; | | ARIAL/Arial --Arial; | | NOTE: this fontstyles can be used in together to display a | | special format styles; | | Color: what color do you want the text be displayed; | | By default, it will keep the current color; | | dlm: CELL/cell/NEXTCELL/nextcell -- put the cursor to the nextcell | | before executing this function; | | PARA/para/INSERTPARA/insertpara -- put the cursor to a newline| | before executing this function; | | COMMA/comma -- put a ', ' before execution of the currect | | function; | | SPACE/space -- put a ' ' before execution of the currect | | function; | | leftindent: default 0; | | often used value: 0.25; | | wordref: default is "wordsys"; word reference; | | NOTE: this function is created for the entire datastep, instead of | | one label per iteration it must be used outside a data step; | |-------------<-- End of Files or Arguments Needed-->----------------| |--------------------------------------------------------------------| |------------------<-- Start of Files Created-->---------------------| | Example: %labeltable(text="this is a test", nextdlm=F); | | Usage: %labeltable(text=,nextdlm=T,justify=CENTER, | | fontstyle=regular, fontsize=10, color=, | | dlm=CELL,leftindent=0, wordref=wordsys); | \-------------------<-- End of Files Created-->---------------------*/ %macro labeltable(text=,nextdlm=T,justify=CENTER,fontstyle=regular, fontsize=10, color=, dlm=CELL,leftindent=0, wordref=wordsys); /*--------------------------------------------\ | Author: Duo Zhou; | | Created: 2-27-2001 11:44pm; | | Modified: 7-15-2001 10:19am; | | Purpose: label a table with the contents of| | text; | \--------------------------------------------*/ %local qpairs _i_ ipairnwords numi _j_ iblock currpos localtext colorint; %let hascolor=; %if &color ne %then %do; %let hascolor =1; %let colorint=%colorint(&color); %end; %else %if (&hascolor=1)%then %do; %let colorint=&color_int; %end; %else %do; %let hascolor=0; %let colorint=0; %end; %let qpairs=1; /**** Used to find out the characters among the text names *****/ %let qtext1=%qscan(&text, &qpairs, %str(''"")); %let qtext=&qtext1; %do %while(%length(&&qtext&qpairs) gt 0); %let qpairs=%eval(&qpairs+1); %let qtext&qpairs=%qscan(&text, &qpairs, %str(''"")); %if &&qtext&qpairs ne %then %do; %let qtext=&qtext &&qtext&qpairs; %end; %end; %let qpairs=%eval(&qpairs-1); %let nwords=1; /**** Used to find out the characters among the text names *****/ %let text1=%qscan(&qtext, &nwords, %str( (){}[]+,-/\%:><±*^°$#@~=|)); %do %while(%length(&&text&nwords) gt 0); %let nwords=%eval(&nwords+1); %let text&nwords=%qscan(&qtext, &nwords, %str( (){}[]+,-/\%:><±*^°$#@~=|)); %end; %let nwords=%eval(&nwords-1); %if (%index(&qtext,&text1)>1) %then %do; %let block0="%substr(&qtext,1,%eval(%index(&qtext,&text1)-1))"; %let text=%substr(&qtext,%index(&qtext,&text1),%length(&qtext)); %end; %else %do; %let block0=""; %let text=&qtext; %end; %do _j_=1 %to &nwords; %let block&_j_="%qscan(&text, &_j_, %str(abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.))"; %end; /**** Used to find out the characters among the text names *****/ Data _null_; file &wordref lrecl=2000; length str $2000.; put '[FontSize 10]'; %if (%quote(%upcase(&nextdlm))=T) %then %do; %if (%index(%upcase(&dlm),CELL)) %then %do; put '[NextCell]'; %end; %else %if (%index(%upcase(&dlm),PARA) or %index(%upcase(&dlm),ENTER)) %then %do; %if (%index(%upcase(&dlm), OVERW)) %then %do; put '[CharRight 1]'; put '[EndOfLine 1]'; %end; %else %do; put '[InsertPara]'; %end; %end; %else %if (%index(%upcase(&dlm),SPACE)) %then %do; put '[Insert " "]'; %end; %else %if (%index(%upcase(&dlm),COMMA)) %then %do; put '[Insert ", "]'; %end; %end; str='[FormatFont .Points = "'||trim(left(put(&fontsize, 3.0)))||'", .Color = '||trim(left(put(&colorint, 3.0)))||', .Strikethrough = 0, .Superscript = 0, .Subscript = 0, .Hidden = 0, .SmallCaps = 0, .AllCaps = 0, .Spacing = "0 pt", .Position = "0 pt"]'; put str; str='[FormatFont .Kerning = 0, .Bold = 0, .Italic = 0, .KerningMin = "", .Tab = "0" .Underline = 0, .Font = "Times New Roman"]'; put str; %if (%index(%upcase(&fontstyle),BOLD)) %then %do; str='[FormatFont .Bold = 1]'; put str; %end; %if (%index(%upcase(&fontstyle),ITALIC)) %then %do; str='[FormatFont .Italic = 1]'; put str; %end; %if (%index(%upcase(&fontstyle),UNDERLINE1)) %then %do; str='[FormatFont .Underline = 1]'; put str; %end; %else %if (%index(%upcase(&fontstyle),UNDERLINE2)) %then %do; str='[FormatFont .Underline = 2]'; put str; %end; %if (%index(%upcase(&fontstyle),ARIAL)) %then %do; str='[FormatFont .Font = "Arial"]'; put str; %end; %if (%quote(%upcase(&justify))=LEFT) %then %do; put '[LeftPara]'; %end; %else %if (%quote(%upcase(&justify))=RIGHT) %then %do; put '[RightPara]'; %end; %else %do; put '[CenterPara]'; %end; str= '[FormatParagraph .LeftIndent = "'||trim(left(put(&leftindent, 4.2)))||'" + Chr$(34)]'; put str; str='[Insert "'||&block0||'"]'; put str; %do _ij_=1 %to &nwords; str= '[Insert "'||trimn(left("&&text&_ij_"))||'"]'; put str; %if (%index(&&block&_ij_,+-)) %then %do; put '[Insert " "]'; str= '[InsertSymbol .Font = "Symbol", .CharNum = "177"]'; put str; put '[Insert " "]'; %end; %else %if (%index(&&block&_ij_,>=)) %then %do; put '[Insert " "]'; str= '[InsertSymbol .Font = "Symbol", .CharNum = "179"]'; put str; put '[Insert " "]'; %end; %else %if (%index(&&block&_ij_,<=)) %then %do; put '[Insert " "]'; str= '[InsertSymbol .Font = "Symbol", .CharNum = "163"]'; put str; put '[Insert " "]'; %end; %else %if (%index(&&block&_ij_,*)) %then %do; put '[Insert " "]'; str= '[InsertSymbol .Font = "Symbol", .CharNum = "180"]'; put str; put '[Insert " "]'; %end; %else %do; %if (&_ij_ < &nwords) %then %do; str='[Insert "'||&&block&_ij_||'"]'; put str; %end; %end; %end; run; %mend labeltable;